home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / dcview / src / dropicon.c < prev    next >
Encoding:
Text File  |  1997-02-23  |  4.2 KB  |  114 lines

  1. /******************************************************************************
  2.  *    dropicon.c:    アイコンのドロップ処理
  3.  ******************************************************************************
  4.  *
  5.  *
  6.  */
  7. #include <sxdef2.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <io.h>
  12. #include <jfctype.h>
  13. #include <doslib.h>
  14. #include <event.h>        /* イベントマンを利用するときに必要    */
  15. #include <sxgraph.h>        /* グラフ系マネージャを利用するときに必要 */
  16. #include <window.h>        /* ウィンドウマンを利用するときに必要    */
  17. #include <dialog.h>        /* ダイアログマンを利用するときに必要    */
  18. #include <control.h>        /* コントロールマンを利用するときに必要    */
  19. #include <task.h>        /* タスクマンを利用するときに必要    */
  20. #include "DC.h"            /* このプログラム固有のヘッダファイル    */
  21.  
  22. /******************************************************************************
  23.  *    dropIcon():    アイコンのドロップ処理
  24.  ******************************************************************************
  25.  *    引数:    ComVal *pcv    共通変数へのポインタ
  26.  */
  27. void dropIcon(ComVal *pcv)
  28. {
  29.     int errCode, len;
  30.     Drag *dragPtr;            /* ドラッグポインタ        */
  31.     Cell *pcell;            /* セルレコードへのポインタ    */
  32.     IcState *pis;            /* アイコン管理レコードへのポインタ */
  33.     char fWork[TS_NAMEMAX], ext[TS_NAMEMAX];
  34.     char docFname[90], docPath[90];
  35.  
  36.     /* ドラッグポインタを取得する */
  37.     errCode = TSGetDrag(&dragPtr);
  38.     if (errCode < 0)
  39.         /* ドラッグレコードが無い */
  40.         return;
  41.  
  42.     MMHdlLock(dragPtr->cellList);    /* セルリストへのハンドルをロックする */
  43.     pcell = *dragPtr->cellList;    /* セルレコードへのポインタを取得する */
  44.     TSHideDrag();            /* ラバーバンドを消去する    */
  45.     /* セルレコードの情報の種類がアイコン管理レコード(上位ワードが'FS')
  46.        か? */
  47.     if (HIWORD(pcell->kind) == 'FS') {
  48.         /* アイコンは1つ(ドラッグレコードのセルリストの長さがアイコン
  49.            管理レコードを含むセルレコードの長さと同一の場合)か? */
  50.         if (dragPtr->size == sizeof(IcState) + 8 ) {
  51.             /* アイコン管理レコードへのポインタを取得する */
  52.             pis = (IcState *) pcell->data;
  53.             /* ファイルの属性をチェックする */
  54.             if ((pis->attrib & ATTRMASK) == TS_ARCH) {
  55.                 /* アイコンのフルパスを取得する */
  56.                 len = TSISRecToStr(
  57.                     pis, /* アイコン管理レコード    */
  58.                     fWork); /* パス名格納ポインタ    */
  59.                     stcgfe(ext,fWork);
  60.                     if (len >= 0) {
  61.                         /* ドラッグを終了する */
  62.                         TSEndDrag(TS_FINISH);
  63.                         /* データ読み込み */
  64.  
  65.                         if (pcv->currentFname[0] != 0) {
  66.                             strcpy(&(pcv->pastFname[pcv->pastFno][0]),
  67.                                              pcv->currentFname);
  68.                             pcv->pastofset[pcv->pastFno] = pcv->ofset;
  69.  
  70.                             strcpy(&(pcv->pastPath[pcv->pastFno][0]),
  71.                                              pcv->currentPath);
  72.                             if (GetData(pcv, fWork)) {
  73.                                 pcv->pastFno = pcv->pastFno + 1;
  74.                                 CMShine(pcv->btn12Hdl,C_ACTIVE);
  75.                                 drawGraph(pcv, 0);
  76.                             } else {
  77.                                 strcpy(pcv->currentFname, 
  78.                                     &(pcv->pastFname[pcv->pastFno][0]));
  79.                                 strcpy(pcv->currentPath, 
  80.                                     &(pcv->pastPath[pcv->pastFno][0]));
  81.                                 pcv->errorCode = 1;
  82.                             }
  83.                         } else {
  84.                             if (GetData(pcv, fWork)) {
  85.                                 drawGraph(pcv, 0);
  86.                             } else {
  87.                                 pcv->errorCode = 1;
  88.                             }
  89.  
  90.                         }
  91.                         /* エラーが発生したか? */
  92.                         if (pcv->errorCode != 0) {
  93.                             /* エラーダイアログを表示する */
  94.                             DMError(D_CONFIRM,"エラーが発生しました!");
  95.                             pcv->errorCode = 0; 
  96.                         }
  97.                     } else    /*ファイル名の取得に失敗した    */
  98.                         /* アイコンを元の位置にはじき飛ばして
  99.                            終了する */
  100.                     TSEndDrag(TS_PUTBACK);
  101.             } else        /* ファイルアイコン以外の場合    */
  102.                 /* アイコンを元の位置にはじき飛ばして終了する */
  103.                 TSEndDrag(TS_PUTBACK);
  104.         } else
  105.             /* アイコン2つ以上か他のドラッグレコードだったら
  106.                アイコンを元の位置にはじき飛ばして終了する */
  107.             TSEndDrag(TS_PUTBACK);
  108.     }
  109.     /* セルリストへのハンドルのロックを解除する */
  110.     MMHdlUnlock(dragPtr->cellList);
  111. }
  112. STR@#EdEV3.00<@(!%G0JHH     
  113. ;7\7
  114. 6W^コマ Z@ "    (.Ohh$000ヨ=STL@0il